import java.io.*;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 刘远望
 * Date: 2025-06-13
 * Time: 19:59
 */
//示例3.扫描指定目录，并找到名称或者内容中包含指定字符的所有普通文件（不包含目录）
public class Demo13 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要搜索的目录路径：");
        String path = scanner.next();
        File file = new File(path);
        if (!file.isDirectory()) {
            System.out.println("输入的路径不是目录路径！");
            return;
        }

        System.out.println("请输入要搜索的关键字： ");
        String keyWord = scanner.next();

        //遍历目录下所有文件
        scanDir(file, keyWord);
    }

    private static void scanDir(File file, String keyWord) {
        //1.列出目录下所有内容
        File[] files = file.listFiles();
        if (files == null) {
            //当前目录为空
            return;
        }

        //2.遍历目录下所有文件
        for (File f : files) {
            if (f.isFile()) {
                //是普通文件 执行删除擦偶哦
                dealFile(f, keyWord);
            }else {
                //是目录 递归调用
                scanDir(f, keyWord);//n叉树递归
            }
        }
    }

    private static void dealFile(File f, String keyWord) {
        //1.判断文件名是否包含关键字
        if (f.getName().contains(keyWord)) {
            System.out.println("文件名包含关键字：" + f.getAbsolutePath());
            return;//return代替delete
        }

        //2.读取文件内容判断是否包含关键字 由于keyword是字符串，所以按照字符流的方式来处理
        StringBuilder stringBuilder = new StringBuilder();
        try (Reader reader = new FileReader(f)) {
            while (true) {
                char[] buf = new char[1024];
                int n = reader.read(buf);
                if (n == -1) {
                    break;
                }

                stringBuilder.append(buf, 0, n);//将文件的内容逐个用stringBuilder拼接起来
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        //3.判断文件内容是否包含关键字
        if (stringBuilder.indexOf(keyWord) >= 0) {
            //indexOf方法返回关键字第一次出现的位置，如果没有则返回-1
            System.out.println("文件内容包含关键字：" + f.getAbsolutePath());
            return;//执行删除操作
        }

    }
}
